package com.mo.admin.api.menu.utils;

import com.mo.admin.api.menu.domain.Menu;
import com.mo.admin.api.menu.domain.vo.MenuVO;
import com.mo.admin.api.menu.domain.vo.MetaVO;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MenuTreeUtils {

    public static List<MenuVO> genMenuVOTree(List<Menu> menus) {
        Map<Long, MenuVO> map = new HashMap<>();
        for (Menu menu : menus) {
            MenuVO menuVO = new MenuVO();
            MetaVO metaVO = new MetaVO();
            BeanUtils.copyProperties(menu, metaVO);
            BeanUtils.copyProperties(menu, menuVO);
            menuVO.setMeta(metaVO);
            menuVO.setChildren(new ArrayList<>());
            map.put(menuVO.getId(), menuVO);
        }

        List<MenuVO> result = new ArrayList<>();
        for (Menu menu : menus) {
            MenuVO parent = map.get(menu.getParentId());
            MenuVO menuVO = map.get(menu.getId());
            if (parent != null) {
                parent.getChildren().add(menuVO);
            } else {
                result.add(menuVO);
            }
        }

        return result;
    }
}
